cellrendertoggle: Draw background + frame for mark
authorBenjamin Otte <otte@redhat.com>
Mon, 15 Feb 2016 17:16:32 +0000 (18:16 +0100)
committerBenjamin Otte <otte@redhat.com>
Mon, 15 Feb 2016 17:17:11 +0000 (18:17 +0100)
Also compute padding and borders properly for the marks.

gtk/gtkcellrenderertoggle.c

index 1e7539485f0e0414832b5ed3acb8b84881ad2191..d2f4889e94ac9f55123efe6e825eb2987c6069a6 100644 (file)
@@ -335,12 +335,21 @@ gtk_cell_renderer_toggle_get_size (GtkCellRenderer    *cell,
   gint calc_width;
   gint calc_height;
   gint xpad, ypad;
+  GtkStyleContext *context;
+  GtkBorder border, padding;
 
   priv = GTK_CELL_RENDERER_TOGGLE (cell)->priv;
 
   gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
-  calc_width = xpad * 2 + priv->indicator_size;
-  calc_height = ypad * 2 + priv->indicator_size;
+
+  context = gtk_cell_renderer_toggle_save_context (cell, widget);
+  gtk_style_context_get_padding (context, gtk_style_context_get_state (context), &padding);
+  gtk_style_context_get_border (context, gtk_style_context_get_state (context), &border);
+
+  calc_width = xpad * 2 + priv->indicator_size + padding.left + padding.right + border.left + border.right;
+  calc_height = ypad * 2 + priv->indicator_size + padding.top + padding.bottom + border.top + border.bottom;
+
+  gtk_style_context_restore (context);
 
   if (width)
     *width = calc_width;
@@ -388,6 +397,7 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer      *cell,
   gint x_offset, y_offset;
   gint xpad, ypad;
   GtkStateFlags state;
+  GtkBorder padding, border;
 
   context = gtk_widget_get_style_context (widget);
   gtk_cell_renderer_toggle_get_size (cell, widget, cell_area,
@@ -421,19 +431,33 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer      *cell,
   context = gtk_cell_renderer_toggle_save_context (cell, widget);
   gtk_style_context_set_state (context, state);
 
-  if (priv->radio)
-    {
-      gtk_render_option (context, cr,
+  gtk_render_background (context, cr,
                          cell_area->x + x_offset + xpad,
                          cell_area->y + y_offset + ypad,
                          width, height);
+  gtk_render_frame (context, cr,
+                    cell_area->x + x_offset + xpad,
+                    cell_area->y + y_offset + ypad,
+                    width, height);
+
+  gtk_style_context_get_padding (context, gtk_style_context_get_state (context), &padding);
+  gtk_style_context_get_border (context, gtk_style_context_get_state (context), &border);
+
+  if (priv->radio)
+    {
+      gtk_render_option (context, cr,
+                         cell_area->x + x_offset + xpad + padding.left + border.left,
+                         cell_area->y + y_offset + ypad + padding.top + border.top,
+                         width - padding.left - padding.right - border.left - border.right,
+                         height - padding.top - padding.bottom - border.top - border.bottom);
     }
   else
     {
       gtk_render_check (context, cr,
-                        cell_area->x + x_offset + xpad,
-                        cell_area->y + y_offset + ypad,
-                        width, height);
+                        cell_area->x + x_offset + xpad + padding.left + border.left,
+                        cell_area->y + y_offset + ypad + padding.top + border.top,
+                        width - padding.left - padding.right - border.left - border.right,
+                        height - padding.top - padding.bottom - border.top - border.bottom);
     }
 
   gtk_style_context_restore (context);